#ifndef PATHCAMERA_H_H_H_H_
#define PATHCAMERA_H_H_H_H_
#include "ToolsCallBack.h"
namespace Gui
{

class PathCamera : public Tools
{
	TYPESYSTEM_HEADER();
	//PROPERTY_HEADER(PathCamera);
public:
	PathCamera();
	~PathCamera();

public:
	virtual CKBOOL action(CKRenderContext*);
	virtual void updateCbObject(CK3dEntity*){}
	virtual std::string& getToolsName(){return toolName;}

public:
	virtual void addCallBack(Tools* tl);
	virtual void removeCallBack(Tools* tl);


public:
	bool getState(){return toolState;}
	void setState(bool bl){toolState = bl;}

protected:
	void initPath(void);
	void SetCurveStep(float x,CKBOOL follow);
	void SetCurveStepCircle(float x);
	VxVector BB_Orientate(App::DocumentObject *ent, VxVector dir, int dirMode=5, float roll=0.0f, VxVector up=VxVector::axisY(), float speedValue=1.0f, CKBOOL k=FALSE, CKBOOL unitaryScale=FALSE);

private:
	float                          mTotalTime;
	CKTimeManager*                   mTM;
	bool                           toolState;
	App::DocumentObject*             pCurve;
	CKCamera*                       pCam;
	float                           elapsedTime;
	CK3dEntity*                      parent;
	CKBOOL                           playPause;
	PartGui::ViewProviderPathCamera*    pViewPartCam;
};

class FreeCamera : public Tools
{
	TYPESYSTEM_HEADER();
public:
	FreeCamera();
	~FreeCamera();

public:
	virtual CKBOOL action(CKRenderContext*);
	virtual void updateCbObject(CK3dEntity*){}
	virtual std::string& getToolsName(){return toolName;}

public:
	virtual void addCallBack(Tools* tl);
	virtual void removeCallBack(Tools* tl);


public:
	bool getState(){return toolState;}
	void setState(bool bl){toolState = bl;}

protected:

	bool    toolState;

	Vx2DVector mMouseDownPositon,mMouseUpPosition,mMouseMovePosition;
    bool      m_IsLButtonDown,m_IsLButtonUp;
};
}
#endif